home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 52
/
Amiga Format AFCD52 (Issue 136, May 2000).iso
/
-serious-
/
programming
/
other
/
mesa
/
mesa-glut
/
src-glut.aos
/
glutstuff.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-23
|
7KB
|
261 lines
#if !defined(NDEBUG) && !defined(NODEBUG)
#define MESA_DEBUG
#endif
/*
* Amiga GLUT graphics library toolkit
* Version: 1.1
* Copyright (C) 1998 Jarno van der Linden
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* glutstuff.h
*
* Version 1.0 27 Jun 1998
* by Jarno van der Linden
* jarno@kcbbs.gen.nz
*
* Version 1.1 02 Aug 1998
* by Jarno van der Linden
* jarno@kcbbs.gen.nz
*
* - Quantizer plugin support added
*
*/
#include <exec/types.h>
#include <intuition/intuition.h>
#include <GL/glut.h>
#include <GL/amigamesa.h>
#include <liblists.h>
#define USE_CLIP_LAYER
/* public funtions of MesaGL */
extern APTR glutPool;
APTR AllocVecPooled(register APTR poolHeader __asm__("a0"), register ULONG byteSize __asm__("d0"));
void FreeVecPooled(register APTR poolHeader __asm__("a0"), register ULONG *memory __asm__("a1"));
/* Menus */
#define IGNORE_IN_GAME_MODE(args...) \
{ if (glutstuff.GameMode) return args; }
struct GlutMenuEntry {
struct nnode EntryNode;
#define EntryValue EntryNode.data
struct GlutMenu *EntryMenu;
const char *name;
BOOL issubmenu;
};
struct GlutMenu {
struct nnode MenuNode;
#define MenuID MenuNode.data
struct nlist MenuEntries;
#define NumEntries MenuEntries.nodes
void (*menufunc) (int value);
BOOL needupdate;
};
struct GlutTimer {
struct nnode TimerNode;
#define TimerValue TimerNode.data
ULONG secs, micros;
void (*timerfunc) (int value);
};
struct GlutWindow {
struct nnode WindowNode; /* bind the windows together */
#define WinID WindowNode.data
struct nlist SubWindows; /* bind all subwindows of this window together */
#define NumChildren SubWindows.nodes
struct nnode SubWindowNode; /* a subwindow only have one parent, not more */
struct GlutWindow *SubWindowParent; /* direct link backwards */
struct nlist WindowTimers;
struct Window *window;
#ifdef USE_CLIP_LAYER
struct Region *clipreg;
#endif
amigaMesaContext context;
APTR vi;
struct Menu *menu;
struct GlutMenu *leftmenu, *middlemenu, *rightmenu;
UWORD qualifiers;
int ignorekeyrepeat, repeatmode;
int mousex, mousey;
int joystickpoll, cursor; /* TODO */
int winx, winy; /* Shape that we want */
int winwidth, winheight;
int wincurx, wincury; /* Shape that we believe it to currently be */
int wincurwidth, wincurheight;
void (*displayfunc) (void);
void (*overlaydisplayfunc) (void);
void (*keyboardfunc) (unsigned char key, int x, int y);
void (*keyboardupfunc) (unsigned char key, int x, int y); /* TODO */
void (*reshapefunc) (int width, int height);
void (*visibilityfunc) (int state);
void (*entryfunc) (int state);
void (*windowstatusfunc) (int status); /* TODO */
void (*specialfunc) (int key, int x, int y);
void (*specialupfunc) (int key, int x, int y); /* TODO */
void (*mousefunc) (int button, int state, int x, int y);
void (*joystickfunc) (unsigned int buttonMask, int x, int y, int z); /* TODO */
void (*motionfunc) (int x, int y);
void (*passivemotionfunc) (int x, int y);
BOOL needredisplay,
needreshape, needreshapegui,
needposition, needpositiongui,
needvisibility, visible,
needleftmenu, needmiddlemenu, needrightmenu,
fullscreen, lastoutwindow,
push, pop, show, hide, iconify;
};
struct GlutGameMode {
struct MsgPort *backuped_port;
struct GlutWindow *backuped_window;
struct Screen *GameScreen;
struct GlutWindow FakeyWindow;
};
struct GlutStuff {
struct MsgPort *msgport;
struct GlutWindow *activeWindow; /* window set by glutSetWindow() */
struct GlutWindow *curwin;
struct nlist Windows;
int nextwinid;
struct GlutMenu *activeMenu; /* window set by glutSetMenu() */
struct GlutMenu *curmenu;
struct nlist Menues;
int nextmenuid;
/* stuff for the glutInitWindow* functions */
int initposx, initposy,
initwidth, initheight,
scrwidth, scrheight;
unsigned int initdisplaymode;
char *pubscreenname;
/* basic overwriteable modes */
int doublemode,
rgbamode,
stereomode;
palMode palmode;
GLboolean rgba,
alpha,
db,
accum,
depth,
stencil,
multisample,
stereo,
luminance;
void (*idlefunc) (void);
void (*menustatefunc) (int state);
void (*menustatusfunc) (int status, int x, int y);
ULONG basetime_secs, basetime_micros;
BOOL havebasetime;
/* stuff for the glutGameModeString functions */
int gameposx, gameposy;
int gamewidth, gameheight;
struct GlutGameMode *GameMode;
};
/* deactive debugging-output only on request */
#if !defined(NDEBUG) && !defined(NODEBUG)
extern LONG debugOutputGLUT;
#include <stdio.h>
#define DEBUGOUT(level,str,args...) ({ \
if(debugOutputGLUT >= level) { \
/* Printf(str,"gl : "); */ \
/* Printf(str,##args); */ \
fprintf(stderr,"glut: "); \
fprintf(stderr,str,##args); \
fflush(stderr); \
} \
})
#else
#define DEBUGOUT(level,str,args...) ({})
#define DEBUGOUT_REMOVED
#endif
#define Error(str,args...) ({ \
/*Printf("Fatal error: "); */ \
/*Printf(str,##args); */ \
fprintf(stderr,"Fatal error: "); \
fprintf(stderr,str,##args); \
fflush(stderr); \
abort(); \
})
extern struct GlutStuff glutstuff;
extern struct Library *IntuitionBase;
extern struct Library *GfxBase;
extern struct Library *DOSBase;
extern struct Library *GadToolsBase;
extern struct Library *LayersBase;
extern struct ExecBase *SysBase;
int stuffGetNewWinID(void);
struct GlutWindow *stuffGetWin(int winid);
void stuffLinkInWin(struct GlutWindow *gw);
void stuffLinkInSubWin(struct GlutWindow *gw, struct GlutWindow *gwn);
void stuffLinkOutWin(struct GlutWindow *gw);
void stuffMakeCurrent(struct GlutWindow *gw);
int stuffGetNewMenuID(void);
struct GlutMenu *stuffGetMenu(int menuid);
void stuffLinkInMenu(struct GlutMenu *gm);
void stuffLinkOutMenu(struct GlutMenu *gm);
void stuffMakeCurrentMenu(struct GlutMenu *gm);
struct GlutMenuEntry *stuffGetMenuEntry(int entry, struct GlutMenu *gm);
void stuffLinkInMenuEntry(struct GlutMenuEntry *gme, struct GlutMenu *gm);
void stuffLinkOutMenuEntry(struct GlutMenuEntry *gme, struct GlutMenu *gm);
#define LayerWidth(l) (l->bounds.MaxX - l->bounds.MinX + 1)
#define LayerHeight(l) (l->bounds.MaxY - l->bounds.MinY + 1)
#define InnerWidth(w) (w->Width - w->BorderLeft - w->BorderRight)
#define InnerHeight(w) (w->Height - w->BorderTop - w->BorderBottom)
#ifdef USE_CLIP_LAYER
struct Region *clipWindow(struct Window *win, LONG minX, LONG minY, LONG maxX, LONG maxY);
struct Region *clipWindowToBorders(struct Window *win);
#endif